#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//struct ListNode {
//	int val;
//	struct ListNode* next;
//};
//typedef struct ListNode ListNode;
//
//struct ListNode* reverseList(struct ListNode* head) {
//	if (head == NULL)
//	{
//		return head;
//	}
//
//	ListNode* n1, * n2, * n3;
//	n1 = NULL;
//	n2 = head;
//	n3 = head->next;
//
//	while (n2)
//	{
//	
//		n2->next = n1;
//		n1 = n2;
//		n2 = n3;
//		if (n2)
//		{
//			n3 = n3->next;
//		}
//
//	}
//
//	return n1;
//
//}












 struct ListNode {
      int val;
      struct ListNode *next;
  };
 

 typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {


   
    ListNode* newHead, * newTail, * pcur;
    newHead = NULL;
    newTail = NULL;
    pcur = head;

    while (pcur->val != val)
    {
        if (newHead == NULL)
        {
            newTail = newHead = pcur;
        }
        else {
            newTail->next = pcur;
            newTail = newTail->next;
        }

        if (newTail)
        {
            newTail->next = NULL;
        }
        return newHead;
    }




}